const config = require("./config");

/**
 * 通用请求封装
 */
function request(url, method = "GET", data = {}) {
  return new Promise((resolve, reject) => {
    const app = getApp(); // 获取全局应用实例

    // 检查全局用户信息和 token
    if (url !== "/art-users/login" && (!app.globalData.userInfo || !app.globalData.token)) {
      console.error("用户未登录或 token 不存在，跳转到登录页面...");
      wx.redirectTo({ url: "/pages/login/login" });
      return; // 中断请求
    }

    // 发起请求
    wx.request({
      url: `${config.baseURL}${url}`,
      method,
      data,
      header: {
        'Authorization': `${app.globalData.token}`, // 设置 Authorization 头部
      },
      success: (res) => {
        if (res.statusCode === 200 && res.data.code ==="00000") {
          resolve(res.data);
        } else {
          console.error(`请求失败: ${res.statusCode}, ${res.data?.message || ''}`);
          reject(new Error(`请求失败: ${res.statusCode}`));
        }
      },
      fail: (err) => {
        console.error("请求失败:", err);
        reject(err);
      },
    });
  });
}

/**
 * 登录用户
 */
function loginUser(params) {
  return request("/art-users/login", "POST", params);
}

/**
 * 获取所有的艺术家基本信息(根据艺术话题的ID或者作品类别的ID或者作品所属的流派的ID)
 */
function getAllArtArtist(params){
  return request("/art-artists/getAllArtArtist", "POST", params);
}

/**
 * 获取所有的类别基本信息
 */
function getAllArtCategories(params){
  return request("/art-categories/getAllArtCategories", "POST", params);
}

/**
 * 获取所有的流派基本信息
 */
function getAllArtMovements(params){
  return request("/art-movements/getAllArtMovements", "POST", params);
}

/**
 * 获取所有的话题基本信息
 */
function getAllArtTopic(params){
  return request("/art-topics/getAllArtTopic", "POST", params);
}

/**
 * 获取艺术作品列表
 */
function fetchArtworks(params) {
  return request("/art-works/listArtWorkByParamId", "POST", params);
}

/**
 * 获取艺术作品的详细信息
 */
function getArtworkDetailsById(workId){
  return request(`/art-works/${workId}`, "GET");
}

/**
 * 记录用户的下载行为，以及下载的艺术画的下载量+1
 */
function downloadArtwork(workId){
  return request(`/art-actions/download/${workId}`, "GET");
}

/**
 * 记录用户的分享行为，以及分享的艺术画的分享量+1
 */
function shareArtwork(workId){
  return request(`/art-actions/share/${workId}`, "GET");
}
/**
 * 修改喜好的状态
 */
function updateUserLikeStatus(params){
  return request("/art-likes/update/status", "POST",params);
}

/**
 * 获取热门搜索记录前10条
 */
function getHotSearchHistory(){
  return request("/art-history-search/list", "GET");
}

/**
 * 根据关键字进行搜索
 */
function searchByKeyword(params){
  return request("/art-search/search", "POST",params);
}

/**
 * 获取话题详细信息 根据id以及分页的信息
 */
function getArtTopicById(params){
  return request("/art-topics/getArtTopicById", "POST",params);
}

/**
 * 获取类别详细信息 根据id以及分页的信息
 */
function getArtCategoryById(params){
  return request("/art-categories/getArtCategoryById", "POST",params);
}

/**
 * 获取流派详细信息 根据id以及分页的信息
 */
function getArtMovementById(params){
  return request("/art-movements/getArtMovementById", "POST",params);
}

/**
 * 获取艺术家详细信息 根据id以及分页的信息
 */
function getArtArtistById(params){
  return request("/art-artists/getArtArtistById", "POST",params);
}

/**
 * 获取当前用户喜爱的所有艺术画作品
 */
function getUserLinksArtWork(params){
  return request("/art-likes/getUserLinksArtWork", "POST",params);
}

/**
 * 修改用户的信息
 */
function updateUser(params){
  return request("/art-users/updateUser", "POST",params);
}

/**
 * 用户推荐内容
 * 目前是 艺术作品中 点击量+分享量+下载量+喜欢量 
 * 如果同一数量，则按艺术作品的id降序排列
 */
function userRecommend(params){
  return request("/art-works/userRecommend", "POST",params);
}

/**
 * 返回全部的帮组内容
 */
function getAllHelpContents(){
  return request("/art-help/all", "GET");
}

/**
 * 返回所有的反馈类型内容
 */
function getAllFeedbackTypes(){
  return request("/art-feedback-type/all", "GET");
}

/**
 * 添加反馈内容
 */
function addFeedback(params){
  return request("/art-feedback/add", "POST",params);
}

/**
 * 获取当前用户的所有反馈
 */
function getMyFeedback(){
  return request("/art-feedback/list", "GET");
}

module.exports = { 
  fetchArtworks,
  loginUser,
  getArtworkDetailsById,
  downloadArtwork,
  updateUserLikeStatus,
  shareArtwork,
  getAllArtArtist,
  getAllArtCategories,
  getAllArtMovements,
  getAllArtTopic,
  getHotSearchHistory,
  searchByKeyword,
  getArtTopicById,
  getArtCategoryById,
  getArtMovementById,
  getArtArtistById,
  getUserLinksArtWork,
  updateUser,
  userRecommend,
  getAllHelpContents,
  getAllFeedbackTypes,
  addFeedback,
  getMyFeedback,
};

